package com.demo.java.OD451_500.OD461;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【数据单元的变量替换(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146348586
 */
public class OdMain {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            String input = scanner.nextLine();  // 读取输入
            String[] cells = input.split(",");  // 按逗号分割单元格内容
            String[] array = new String[26];  // 存储26个单元格的值
            boolean[] visited = new boolean[26];  // 标记单元格是否已访问

            // 初始化单元格
            for (int i = 0; i < cells.length; i++) {
                array[i] = String.valueOf(cells[i].charAt(0));  // 取单元格的第一个字符作为内容
            }

            // 处理单元格内容
            if (!processCells(cells, array, visited)) {
                System.out.println("-1");  // 如果出现错误，输出-1
                return;
            }

            printOutput(array);  // 输出最终结果
        }
    }

    // 输出处理结果
    private static void printOutput(String[] array) {
        StringBuilder stringBuilder = new StringBuilder();

        for (int i = 0; i < array.length; i++) {
            String value = array[i];
            if (value != null && !value.isEmpty()) {
                stringBuilder.append(value).append(",");  // 拼接CSV格式
            }
        }

        if (stringBuilder.length() > 0) {
            stringBuilder.deleteCharAt(stringBuilder.length() - 1);  // 删除最后一个多余的逗号
        }

        System.out.println(stringBuilder.toString());  // 输出最终结果
    }

    // 处理所有单元格
    private static boolean processCells(String[] cells, String[] array,
                                        boolean[] visited) {
        for (int i = 0; i < cells.length; i++) {
            if (!processCell(cells[i], i, array, visited)) {
                return false;  // 如果某个单元格处理失败，返回false
            }
        }
        return true;  // 所有单元格处理成功
    }

    // 处理单个单元格
    private static boolean processCell(String cell, int index, String[] array,
                                       boolean[] visited) {
        String result = cell;

        // 处理引用
        while (result.contains("<")) {
            int start = result.indexOf("<");  // 查找引用的起始位置
            int end = result.indexOf(">");  // 查找引用的结束位置

            if (start == -1 || end == -1) {
                break;  // 如果没有找到有效的引用，跳出
            }

            String ref = result.substring(start + 1, end);  // 提取引用的单元格

            // 检查引用是否有效，是否循环引用
            if (!isValidReference(ref, index, array) || visited[ref.charAt(0) - 'A']) {
                return false;  // 如果引用无效，返回false
            }

            visited[ref.charAt(0) - 'A'] = true;  // 标记引用的单元格为已访问
            result = result.substring(0, start) + array[ref.charAt(0) - 'A'] + result.substring(end + 1);  // 替换引用
        }

        array[index] = result;  // 更新当前单元格的值
        return true;
    }

    // 验证引用是否有效
    private static boolean isValidReference(String ref, int index, String[] array) {
        return ref.length() == 1 &&
                Character.isUpperCase(ref.charAt(0)) &&  // 引用的格式必须为大写字母
                index != ref.charAt(0) - 'A' &&  // 不能引用自己
                array[ref.charAt(0) - 'A'] != null;  // 引用的单元格必须已被计算
    }
}